package xpn.platform.modules.attachment;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

import java.util.List;

/**
 * 附件服务定义
 *
 * @author bobatkm Oct 6, 2017
 *
 */

public interface AttachmentService {
	/**
	 * 上载一个或多个文件到指定文件夹
	 *
	 * @param entityLink
	 *            ：所属实体的唯一RESTful的链接。
	 * @param category
	 *            ： 附件分类
	 * @param filename
	 *            ： 文件名
	 * @param saveAttachmentInfo
	 *            ： 是否在数据库中保存附件信息
	 * @param thumbnail
	 *            ： 是否为图片文件生成缩略图
	 * @param width
	 *            ： 缩略图的宽度
	 * @param height
	 *            ： 缩略图的高度
	 * @param request
	 *            ： HttpServletRequest
	 * @return
	 * @throws Throwable
	 */
	Object uploadAttachment(String entityLink, String category,String categoryName, String filename, boolean saveAttachmentInfo,
			boolean thumbnail, int width, int height, String uploadType,HttpServletRequest request) throws Throwable;

	/**
	 * 从指定文件夹删除一个文件
	 *
	 * @param entityLink
	 *            ：所属实体的唯一RESTful的链接。
	 * @param category
	 *            ： 附件分类。
	 * @param fileName
	 *            ： 文件名
	 * @return
	 */
	boolean deleteAttachment(String entityLink, String category, String fileName);

	/**
	 * 从指定目录下载一个文件
	 *
	 * @param request
	 *            ： HttpServletRequest
	 * @param response
	 *            ： HttpServletResponse
	 * @param entityLink
	 *            ：所属实体的唯一RESTful的链接。
	 * @param category
	 *            ： 附件分类。
	 * @param fileName：
	 *            下载文件名
	 * @param forceDownload：
	 *            强迫下载还是打开文件
	 * @param thumbnail：
	 *            是否仅下载图片文件的缩略图
	 * @throws Throwable
	 */
	void downloadAttachment(HttpServletRequest request, HttpServletResponse response, String entityLink,
			String category, String fileName, boolean forceDownload, boolean thumbnail) throws Throwable;


	Boolean hasAttachment(String entityLink,
							String category, String fileName) throws Throwable;

	/**
	 * 获得附件存放的文件夹，如果文件夹不存在，则创建空目录
	 *
	 * @param entityLink
	 *            ：所属实体的唯一RESTful的链接。
	 * @param category
	 *            ： 附件分类。
	 * @return：文件夹全路径
	 */
	String getAttachmentFolder(String entityLink, String category);

	/**
	 * 上载一个或多个文件到指定文件夹
	 *
	 * @param entityLinks
	 *            ：所属实体的唯一RESTful的链接。多个用逗号分隔
	 * @param category
	 *            ： 附件分类
	 * @param filename
	 *            ： 文件名
	 * @param request
	 *            ： HttpServletRequest
	 * @return
	 * @throws Throwable
	 */
	Object queryAttachments(String entityLink, String cateogrys) throws Throwable;

	Object moveFile(JSONObject jsonstring);
}
